VMware Cloud on AWS の NSX-T を Terraform で操作する
大家好,AWS事業本部の西野です。
VMware Cloud on AWS の NSX-T を Terraform で操作してみました。
VMware が公式で提供している NSX Terraform Provider を使用します。
事前準備
VMware Cloud on AWS の環境で NSX Terraform Provider を使用するためには API トークンおよび NSX API のパブリックエンドポイント URL が必要です。 以下、それぞれの取得方法を解説します。
API トークンの取得
API トークンの取得方法については以下のブログをご参照ください。
VMware Cloud on AWS の SDDC を CLI から操作する | DevelopersIO
NSX API のパブリックエンドポイント URL
NSX API のパブリックエンドポイント URL は様々な方法で取得できますが、ここでは PowerCLI を用いて取得します。
PowerCLI のインストール・利用手順については以下のブログをご参照ください。
VMware Cloud on AWS の SDDC を CLI から操作する | DevelopersIO
上記ブログの手順で Connect-VMC コマンドレットによる SDDC 環境への接続を済ませたのち、以下のコマンドレットを実行します。
PS > get-vmcsddc -Name <SDDC 名> | select-object NsxApiPublicEndpointUrl NsxApiPublicEndpointUrl ----------------------- https://nsx-XXX-XXX-XXX-XXX.rp.vmwarevmc.com/vmc/reverse-proxy/api/orgs/{Org ID}/sddcs/{SDDC ID}/sks-nsxt-manager
こうして取得できるのが NSX API のパブリックエンドポイント URL です。
Terraform にパラメータとして渡してあげる必要があるのでメモしておきます。
操作可能なリソースおよびデータソース
Terraform によって操作可能なリソースおよびデータソースには制限があるようです。
以下が本稿執筆時点で有効なリソースおよびデータソースのリストです。
リソース
- Flexible Segments: nsxt_policy_segment
- Fixed Segments: nsxt_policy_fixed_segment
- Distributed Firewall Section: nsxt_policy_security_policy
- NAT: nsxt_policy_nat_rule
- Security Groups: nsxt_policy_group
- Services: nsxt_policy_service
- DHCP Relay: nsxt_policy_dhcp_relay
- Virtual Machine Tags: nsxt_policy_vm_tag
本稿末尾の参考リンク内のリストに Fixed Segments(nsxt_policy_fixed_segment) は含まれていないものの、当該リソースのページには VMC 環境で有効な旨が記載されていました。また、nsxt_policy_segment(Resource) のページを参照する限り、VMC 環境においては nsxt_policy_fixed_segment によるセグメント作成が推奨されているようです。
データソース
- Services: nsxt_policy_service
- Edge Cluster: nsxt_policy_edge_cluster
- Transport Zone: nsxt_policy_transport_zone
- Tier-0 Gateway: nsxt_policy_tier0_gateway
- Tier-1 Gateway: nsxt_policy_tier1_gateway
サンプルコード
provider.tf
terraform { required_providers { nsxt = { source = "vmware/nsxt" } } } provider "nsxt" { host = var.nsx_api_public_endpoint_url vmc_token = var.vmc_token allow_unverified_ssl = true enforcement_point = "vmc-enforcementpoint" }
vmc_token
には API トークンを、host
には NSX API のパブリックエンドポイント URL をそれぞれ指定します。
VMware Cloud on AWS 環境の場合、enforcement_point
には常に "vmc-enforcementpoint" を指定します。
main.tf
resource "nsxt_policy_fixed_segment" "terraform_segment" { display_name = "terraform_segment" description = "Terraform provisioned Segment" connectivity_path = data.nsxt_policy_tier1_gateway.mygateway.path subnet { cidr = "192.168.201.1/24" dhcp_ranges = ["192.168.201.2-192.168.201.250"] dhcp_v4_config { server_address = "192.168.201.253/24" lease_time = 86400 } } } data "nsxt_policy_tier1_gateway" "mygateway" { display_name = "Compute Gateway" }
connectivity_path
にはセグメントを接続する Tier-1 Gateway を指定します。今回は既に作成済みの Tier-1 Gateway (Compute Gateway) にセグメントを接続したかったため、データソースを利用しました。
variables.tf
variable "nsx_api_public_endpoint_url" { description = "NSX API Base URL" type = string } variable "vmc_token" { description = "API token is used to authenticate when calling VMware Cloud Services APIs." type = string }
今回作成するリソースに必要な variables を定義しています。(特筆すべき点はなし)
terraform.tfvars
nsx_api_public_endpoint_url = "https://nsx-XXX-XXX-XXX-XXX.rp.vmwarevmc.com/vmc/reverse-proxy/api/orgs/{Org ID}/sddcs/{SDDC ID}/sks-nsxt-manager" vmc_token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
冒頭で確認した API トークンおよび NSX API のパブリックエンドポイント URL をこのように指定します。
apply してみた
サンプルコードで定義したセグメントを無事作成できています。
参考
Docs overview | vmware/nsxt | Terraform Registry
VMware NSX-T Terraform Provider for VMConAWS | Guides | vmware/nsxt | Terraform Registry
VMware NSX-T Terraform Provider for VMConAWS | Guides | vmware/nsxt | Terraform Registry
終わりに
このブログがほんの少しでも世界を良くできれば嬉しいです。 AWS事業本部の西野 (@xiyegen) がお送りしました。